package com.heima;

import org.junit.Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

/**
 * 模拟SQL注入问题
 * 模拟登陆实现功能
 */

public class JDBC_PreparedStatementDemo_UserLogin {
    /**
     * 正常登陆情况
     * @throws Exception
     */
    @Test
    public void nomal_login() throws Exception{
        //1.注册驱动
//        Class.forName("com.mysql.jdbc.Driver");//可以不写

        //2.获取数据库连接
//        String url="mysql:jdbc://127.0.0.1:3306/user?useSSL=false";//连接本机主机名和端口号可以省略
        String url="jdbc:mysql:///test?useSSL=false";
        String username="root";
        String password="18307096730..";
        Connection conn = DriverManager.getConnection(url, username, password);

        //定义用户名和密码
        String name="zhangsan";
        String pw="123";
        //3.定义sql查询语句
        String sql="select *from user where username='"+name+"' and password='"+pw+"'";//字符串拼接  sql里面=后面带有‘’的

        //4.获取sql执行对象
        Statement stmt = conn.createStatement();

        //5.执行查询sql，使用executeQuery
        ResultSet rs = stmt.executeQuery(sql);

        //6.如果查询到数据就是登陆成功
        if (rs.next()){
            System.out.println("登陆成功~~~");
        }else{
            System.out.println("登陆失败~~~");
        }

    }

    /**
     * 演示sql注入问题
     */
    public void sql_proplem_login() throws Exception{
        //1.注册驱动
//        Class.forName("com.mysql.jdbc.Driver");//可以不写

        //2.获取数据库连接
//        String url="mysql:jdbc://127.0.0.1:3306/user?useSSL=false";//连接本机主机名和端口号可以省略
        String url="jdbc:mysql:///test?useSSL=false";
        String username="root";
        String password="18307096730..";
        Connection conn = DriverManager.getConnection(url, username, password);

        //定义用户名和密码
        String name="zhangadSdasan";
        String pw="'or'1'='1";
        //3.定义sql查询语句
        String sql="select *from user where username='"+name+"' and password='"+pw+"'";//字符串拼接  sql里面=后面带有‘’的

        //4.获取sql执行对象
        Statement stmt = conn.createStatement();

        //5.执行查询sql，使用executeQuery
        ResultSet rs = stmt.executeQuery(sql);

        //6.如果查询到数据就是登陆成功
        if (rs.next()){
            System.out.println("登陆成功~~~");
        }else{
            System.out.println("登陆失败~~~");
        }

    }


}
